package ch5;

public class ReferenceParameter {
/**
* 基本数据类型与引用数据类型在方法调用时的差别
* 
* @param args
*/
	
	public void change(int a){//参数是数据类型
		a = 12;
		System.out.println("in method"+a);
	}
	
	public void change(String str) {//参数是一个对象类型，引用数据类型
		str = "in method";
		System.out.println(str);
	}
	
	public void change(int[] array) {//数组是一个引用数据类型
		array[0] = 9;//修改数组内部的数据会影响实参的数据值，没有对数组重新赋值
		
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();	
	}

	public void change2(int[] array){//数组是一个引用数据类型
		array = new int[]{2,3,4,5};//修改数据的引用，重新对数组进行赋值，方法内部的修改不会影响到方法外部
		for(int i:array){
			System.out.print(i+"\t");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ReferenceParameter rp = new ReferenceParameter();
		
		//1.基本数据类型
		int a=10;
		rp.change(a);//传值调用，传递的参数是参数的数据值
		System.out.println("after change"+a);
		
		String str = "Hello 引用数据类型";
		rp.change(str);//传引用调用，传递的参数是一个引用数据类型
		System.out.println("after change"+str);
		
		int[] array = new int[]{1,2,3,4,5,6};
		rp.change(array);//传引用调用，传递的参数是一个引用数据类型
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		
		 array = new int[]{1,2,3,4,5,6};
		rp.change2(array);//传引用调用，传递的参数是一个引用数据类型，在方法内部引用，不影响方法外部（实参）
		for(int k:array){
			System.out.print(k+"\t");
		}
		System.out.println();
		

	}

}
